<!DOCTYPE html>
<html lang="en">
<head>
    <meta  http-equiv="content-type" content="text/html" charset="utf-8"/>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
        /**
         * 简单原型
         */
        function Person(){

        }
        Person.prototype = {
            constructor:Person,//指明原型对象的构造函数，建议必须加上，但是这种方式不好，
                                // 因为constructor是不可枚举的，Object.defineProperty()
            name:'z3',
            age:20,
            job:'程序员',
            say:function(){
                alert('我是原型函数！');
            }
        }
        /**
         * 参数1：重设构造器的对象
         * 参数2：设置什么属性
         * 参数3：option配置项
         * 给原型对象重新定义构造器
         */
        Object.defineProperty(Person.prototype,'constructor',{
            enumerable:false,
            value:Person
        });
        var p1 = new Person();
        alert(p1.name);


        /**
         * 原型的动态特性
         */

        function Person1(){

        }
        var p1 = new Person1();
        //原型对象的默认构造器是Person1
        Person1.prototype.say = function(){
            alert('我是方法');
        }
        p1.say();
        /****************下边是错误的写法(1,3,2顺序是对的)******************/
        function Person1(){//1

        }
        var p1 = new Person1();//2
        //原型对象的默认构造器是Person1
        Person1.prototype = {//3
            constructor:Person,
                name:'z3',
                age:20,
                job:'程序员',
                say:function(){
                alert('我是原型函数！');
            }
        }
        p1.say();//此时原型对象里没有任何属性和方法

    </script>
</head>
<body>

</body>
</html>